Skip to main content
Version: Current

一、开发环境

本系列设备的生态系统在设计上分为:Host(主机开发端)Device(设备端) 两个部分。

用户通过主机开发端的 TACO SDK 进行应用开发,并部署到加载了运行环境(须安装“taco-sdk” deb 包)的设备端实现功能。

本文例程以 EM20-DK 开发板为基准开发,适配该板卡的硬件资源与外设配置。

1.1 准备物料

物料名称数量说明
EM20-DK 开发板1软件运行平台
开发板电源1推荐 12V/6A(不低于 2A),5.5*2.5mm 母头,中心为正极
JTAG 下载器1用于下载和调试 CPU 程序(非必需)
USB 线1作为串口线
以太网线缆1五类或六类网线,接到开发板的 RJ45 网口 0(ETH0)
Micro SD 卡1用于刷机或调试,由于系统固件较大,更大的存储、更高的读写性能会带来更好的使用体验,推荐使用 64GB/class10 或更高规格的 Micro SD 卡
Micro SD 卡读卡器1用于读写 Micro SD 卡中的文件
串口调试工具(软件)1用于与开发板建立通信,推荐 SecureCRT 或 MobaXterm

1.2 设备端系统简介

本系列设备端采用定制的 Linux 系统(以下简称本设备系统),是一款基于 Ubuntu 的免费操作系统,且针对 EM20-DK 的硬件进行了适配及优化。本设备系统拥有 66,663 余款 Ubuntu 软件包,可以满足大多数使用需求。

本设备系统基于 Ubuntu 发布周期内的阶段发行版本,大约每 2 年发布一次。最新版基于 Ubuntu 24.04(Noble)。

本设备的软件架构如下图所示:

主要软件的介绍如下表所示:

软件名称软件描述
ModelZoo其中包括了在线展示的 Readme、样例配置和程序、性能深度分析数据等。
taRuntimetaRuntime 是 TACO SDK 的一个重要组成模块,它在板端提供了一组 C 语言编程接口(API),用于支持板端应用程序基于 EA6530 NPU 硬件完成网络模型推理任务。
taCVtaCV 是 TACO SDK 中的一个软件模块,它以 EA6530 芯片提供的硬件加速能力为基础,提供了一套性能优化的图像处理算子,可以支撑多种视觉算法任务,包括传统视觉算法、JPEG 编解码、神经网络算法等。
taFFmpegtaFFmpeg 框架提供了获取视频流和流转发的协议,除了原有的基于 CPU 算力实现的视频/图像编解码功能之外,还提供了基于芯片硬件能力实现的视频/图像编解码接口。
taOpenCVtaOpenCV 框架除了原有的基于 CPU 算力提供的图像编解码和图像处理功能之外,还通过 FFmpeg 提供了基于芯片硬件能力实现的视频编解码功能,以及通过 TacoCV 提供了 JPEG 硬件编解码功能和部分视频处理功能。
taOpenBLAStaOpenBLAS 库基于 CPU 向量指令集提供了软硬件加速的线性代数基础运算功能,其中包括神经网络领域常用的矩阵和向量乘法等功能。

1.3 设备端软件更新

请始终确保在本设备系统上运行的软件版本是最新的。这可以使设备免受漏洞影响,确保能及时收到最新补丁。

1.3.1 使用 APT 管理软件包

在本设备系统中,推荐使用 APT(Advanced Package Tool,高级软件包工具)来安装、更新和卸载软件。用户可以用命令行 apt 调用 APT。在运行命令之前请先通过串口或者 SSH 连接至开发板。

安装更新

APT 会把软件源列表存放在文件 /etc/apt/sources.list 中。在安装软件之前,请运行以下命令来刷新(update)位于 /etc/apt/sources.list 的本地软件源:

# sudo apt update

运行以下命令,可把所有已安装的软件包更新(upgrade)至最新版本:

# sudo apt full-upgrade

📝 注意:

  • 与标准的Ubuntu不同,本设备系统始终处于开发状态。因此,软件包的依赖关系有时会发生变更,更新软件包应始终使用 full-upgrade,而不要用普通的 upgrade

请定期运行这些命令,确保软件保持最新状态。

搜索软件

要搜索软件包,请用 apt-cache search 搜索(search)关键字:

# apt-cache search <关键字>

例如,以下是关键字 taco 的搜索结果:

# apt-cache search taco
dist - Tools for developing, maintaining and distributing software
folks-common - library to aggregates people into metacontacts (common files)
folks-tools - Telepathy backend for libfolks - database and import tools
gajim - GTK+-based Jabber client
gambas3-gb-db-form - Gambas database bound controls
gir1.2-folks-0.7 - library to aggregates people into metacontacts - GObject-Introspection
golang-github-jtacoma-uritemplates-dev - URI Templates (RFC 6570) implemented in Go
golang-github-miolini-datacounter-dev - Golang counters for readers/writers (library)
golang-github-ttacon-chalk-dev - Go library for prettifying terminal/console output
libdist-zilla-util-configdumper-perl - simplify extraction of plugin settings for Dist::Zilla plugin authors
libfolks-dev - library to aggregates people into metacontact - development files
libfolks-doc - library to aggregates people into metacontact - documentation
libfolks-dummy-dev - Dummy backend for libfolks - development files
libfolks-dummy-doc - Dummy backend for libfolks - documentation
libfolks-dummy26 - Dummy backend for libfolks
libfolks-eds-dev - Evolution-data-server backend for libfolks - development files
libfolks-eds-doc - Evolution-data-server backend for libfolks - documentation
libfolks-eds26 - Evolution-data-server backend for libfolks
libfolks-telepathy-dev - Telepathy backend for libfolks - development files
libfolks-telepathy-doc - Telepathy backend for libfolks - documentation
libfolks-telepathy26 - Telepathy backend for libfolks
libfolks26 - library to aggregates people into metacontacts
python3-metaconfig - Python ConfigParser bootstrapping library (Python3)
unibetacode - convert classical Greek and Coptic between Beta Code and Unicode
yt-dlp - downloader of videos from YouTube and other sites
libtacv - Multimedia Library Package
libtaffmpeg-dev - Multimedia Library Package
libtapipeworks - TACO Pipeworks Library
libtasys - TACO System Library

搜索结果返回了多个软件包,它们的名称或简介中均包含关键词 taco

使用以下命令可查看其详细信息:

# apt-cache show <软件包名>

例如,假设要查询 unibetacode 这个软件包,结果如下:

# apt-cache show unibetacode
Package: unibetacode
Architecture: riscv64
Version: 1.2-2
Priority: optional
Section: universe/text
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian QA Group <packages@qa.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 164
Depends: libc6 (>= 2.27)
Filename: pool/universe/u/unibetacode/unibetacode_1.2-2_riscv64.deb
Size: 50620
MD5sum: 0c00f63579656983b668ec7a3272051e
SHA1: 77c389d933d6bfee9fb68ccc72c2803615e90504
SHA256: 122ec2d0bb96f58b47066e7c74edacbfa3c0011b6af256b46403eafd99a27462
SHA512: ba366dd5ddc61aac8c5ab1b55cf8becfa6c738f212f65f741732e1e61f45d82238620eeefe9efa084c54f7009f36e429aefb5e571c653759a4b40c4d28793458
Homepage: http://unifoundry.com/unibetacode/
Description-en: convert classical Greek and Coptic between Beta Code and Unicode
The unibetacode package contains two utilities primarily designed for ASCII
transliteration of classical Greek: beta2uni converts Beta Code text to UTF-8
Unicode, and uni2beta converts text from UTF-8 Unicode to Beta Code. A third
utility, unibetaprep, converts special codes for other characters (such as
Byzantine musical symbols) into four- to six-digit Unicode code points.
.
Beta Code is an ASCII-only encoding scheme created in the 1970s as an
efficient, intuitive digital input method for classical Greek. It provides
an easy way to enter classical Greek on a plain ASCII keyboard for conversion
to UTF-8 Unicode text. This package implements a subset of Beta Code as
specified by the Thesaurus Linguae Graecae (TLG) Project at the University
of California, Irvine. The unibetacode package also is compatible with
the Beta Code implementation of the Perseus Digital Library of Tufts
University and other online repositories of classical Greek.
.
TLG Coptic support only includes the basic alphabet plus the jinma (grave)
accent. TLG Hebrew support only covers the basic alphabet, aleph (U+05D0)
through tav (U+05EA). To this base, unibetacode adds full Unicode coverage.
The unibetacode(5) man page describes the Beta Code file format in detail.
Files in the examples directory provide sample encodings and test data.
Description-md5: 5e788ef2f5f52536d1a56f7f249e410f

可使用此命令验证维护者、版本和大小是否满足您对软件包的要求。

安装软件包

要在开发板上安装软件包,请把软件包名传给以下命令:

# sudo apt install <软件包名>

apt 会显示软件包将占用的磁盘容量。输入 Y 并按回车键来确认安装。您可以在上述命令中添加参数 -y,跳过这个确认步骤。

卸载软件包

要在开发板上卸载软件包,请将软件包名传给以下命令:

# sudo apt remove <软件包名>

📝 注意:

  • 要彻底抹除软件包的全部痕迹(包括配置文件),请把 remove 改成 purge

apt 将显示在卸载软件包后,可释放的磁盘容量。输入 Y,再按回车键确认卸载。您可以在上述命令中添加参数 -y,跳过这个确认步骤。

管理 apt 磁盘使用情况

在执行之前,sudo apt full-upgrade 将显示完成更新所需的下载及存储会占用的磁盘容量。要查看剩余磁盘空间是否充足,请运行以下命令:

# df -h

apt 会把已下载的软件包(.deb 文件)存储到 /var/cache/apt/archives。在安装过程中,apt 会下载这些软件包,然后把文件从软件包复制到对应的安装位置。视您安装的软件而定,软件包自身可能会占用大量空间。要删除所有遗留的软件包本体,请运行以下命令:

# sudo apt clean

1.3.2 将操作系统更新至最新大版本

可通过 OTA 的方式下载最新系统镜像,并将其更新至 SD 卡。

此过程会清除 SD 卡上的所有原数据,因此 在更新系统前,建议先备份重要数据

OTA 更新方式请参考 「EM20-DK 使用技术手册」文档的「系统升级」章节 的相关内容。

1.4 准备主机环境

您需要准备一台 x86 主机安装 SDK 和配置开发环境。如果该主机主要用于模型编译、量化、仿真等用途,则对硬件配置要求较高,推荐使用内存容量 12GB 以上的硬件配置;如果该主机主要用于交叉编译板端程序,则主流的笔记本电脑或台式机都能满足要求。操作系统可以采用 Ubuntu 20.04 或更新的版本。

1.4.1 下载相关工具

在 Linux 桌面打开终端,输入以下指令下载相关开发所需工具:

sudo apt-get update
sudo apt install -y git git-lfs wget unzip parted fdisk util-linux e2fsprogs dosfstools

1.4.2 安装Docker环境

TACO SDK 的编译环境是以 docker 镜像方式提供的,所以您的主机需要有 docker 环境。如果之前已安装过 docker 可以跳过本节,否则可以参考以下脚本安装 docker 环境以及配置服务:

# 安装 docker
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

# docker 命令免 root 权限执行
# 创建 docker 用户组,若已有 docker 组会报错,可忽略
sudo groupadd docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 重启 docker 服务
sudo service docker restart

# 切换当前会话到新 group 或重新登录重启会话
newgrp docker

1.4.3 获取 SDK

请点击此处链接 获取 TACO SDK 包 下载SDK并解压到主机中。

1.4.4 创建并启动 SDK 环境

进入 SDK 代码根目录,然后执行以下命令创建并启动编译 docker:

./start_workshop_docker.sh

进入 docker 后的工作目录已被设置为与宿主机的共享目录,同时也是 SDK 的解压目录(根目录),所以在 docker 中可以看到完整的 SDK 目录结构。 为了确保 SDK 能够正常工作,我们可以在 docker 中输入以下命令来测试 GCC 工具链是否正常:

/toolchain/bin/riscv64-unknown-linux-gnu-gcc -v

期待的反馈如下:

Using built-in specs.
COLLECT_GCC=/toolchain/bin/riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/toolchain/bin/../libexec/gcc/riscv64-unknown-linux-gnu/14.1.1/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /flow/./source/riscv/gcc/configure --target=riscv64-unknown-linux-gnu --with-gmp=/flow/build-gcc-riscv64-unknown-linux-gnu/build-Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/lib-for-gcc-x86_64-linux --with-zstd=no --with-mpfr=/flow/build-gcc-riscv64-unknown-linux-gnu/build-Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/lib-for-gcc-x86_64-linux --with-zstd=no --with-mpc=/flow/build-gcc-riscv64-unknown-linux-gnu/build-Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/lib-for-gcc-x86_64-linux --with-zstd=no --with-libexpat-prefix=/flow/build-gcc-riscv64-unknown-linux-gnu/build-Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/lib-for-gcc-x86_64-linux --with-zstd=no --with-libmpfr-prefix=/flow/build-gcc-riscv64-unknown-linux-gnu/build-Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/lib-for-gcc-x86_64-linux --with-zstd=no CXXFLAGS='-g -O2 -DTHEAD_VERSION_NUMBER=3.0.1 ' --prefix=/flow/build-gcc-riscv64-unknown-linux-gnu/Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1 --with-sysroot=/flow/build-gcc-riscv64-unknown-linux-gnu/Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1/sysroot --with-pkgversion='Xuantie-900 linux-6.6.0 glibc gcc Toolchain V3.0.1 B-20241120' --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --enable-libsanitizer --disable-nls --disable-bootstrap --src=/flow/./source/riscv/gcc --enable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medany'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.1.1 20240710 (Xuantie-900 linux-6.6.0 glibc gcc Toolchain V3.0.1 B-20241120)